home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / Source / WAREZ 1.1 source Folder / warez ƒ / warez code ƒ / warez meat.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-16  |  7.5 KB  |  386 lines  |  [TEXT/KAHL]

  1. /**********************************************************************\
  2.  
  3. File:        warez meat.c
  4.  
  5. Purpose:    This module handles actually converting text into WAREZ talk.
  6.  
  7.  
  8. WAREZ -=- nostalgia isn't what it used to be
  9. Copyright ©1994, Mark Pilgrim
  10.  
  11. This program is free software; you can redistribute it and/or modify
  12. it under the terms of the GNU General Public License as published by
  13. the Free Software Foundation; either version 2 of the License, or
  14. (at your option) any later version.
  15.  
  16. This program is distributed in the hope that it will be useful,
  17. but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. GNU General Public License for more details.
  20.  
  21. You should have received a copy of the GNU General Public License
  22. along with this program in a file named "GNU General Public License".
  23. If not, write to the Free Software Foundation, 675 Mass Ave,
  24. Cambridge, MA 02139, USA.
  25.  
  26. \**********************************************************************/
  27.  
  28. #include "warez meat.h"
  29. #include "program globals.h"
  30.  
  31. Boolean            gInWord;
  32. unsigned long    gInputOffset;
  33. unsigned long    gOutputOffset;
  34. Ptr                gInputBuffer;
  35. Ptr                gOutputBuffer;
  36. Boolean            gInputNeedsUpdate;
  37. Boolean            gOutputNeedsUpdate;
  38. unsigned long    gAbsoluteOffset;
  39. unsigned long    gInputLength;
  40. Boolean            gSeenBackslash;
  41. int                gCurlyLevel;
  42.  
  43. void ConvertIt(void)
  44. {
  45.     char            oneChar;
  46.     
  47.     if (gUseRTF)
  48.     {
  49.         oneChar=ThisChar();
  50.         if ((oneChar=='}') && (gCurlyLevel>0))
  51.             gCurlyLevel--;
  52.         else if (oneChar=='{')
  53.             gCurlyLevel++;
  54.         
  55.         if (oneChar==0x5c)
  56.             gSeenBackslash=TRUE;
  57.         
  58.         if ((gCurlyLevel>2) || (gSeenBackslash))
  59.         {
  60.             StoreChar(oneChar);
  61.             InputPlus(1);
  62.             if ((oneChar==' ') || (IsNumeric(oneChar)))
  63.                 gSeenBackslash=FALSE;
  64.             return;
  65.         }
  66.     }
  67.     
  68.     if ((ThisChar()=='.') && (!IsAlpha(NextChar(1))) && (!IsNumeric(NextChar(1))))
  69.     {
  70.         StoreString("\p!!");
  71.         InputPlus(1);
  72.         return;
  73.     }
  74.     
  75.     if (ThisChar()==0x27)
  76.     {
  77.         StoreChar(0x22);
  78.         InputPlus(1);
  79.         return;
  80.     }
  81.     
  82.     if (ThisChar()=='’')
  83.     {
  84.         StoreChar('”');
  85.         InputPlus(1);
  86.         return;
  87.     }
  88.     
  89.     if (!IsAlpha(ThisChar()))
  90.     {
  91.         gInWord=FALSE;
  92.         StoreChar(ThisChar());
  93.         InputPlus(1);
  94.         return;
  95.     }
  96.     
  97.     oneChar=(ThisChar())|0x20;
  98.     
  99.     if ((!gInWord) && (oneChar=='d') && ((NextChar(1)|0x20)=='u') && ((NextChar(2)|0x20)=='d') && ((NextChar(3)|0x20)=='e'))
  100.     {
  101.         gInWord=TRUE;
  102.         StoreString("\pD00D");
  103.         InputPlus(4);
  104.         return;
  105.     }
  106.     
  107.     if ((gInWord) && (oneChar=='o') && ((NextChar(1)|0x20)=='u') && ((NextChar(2)|0x20)=='l') && ((NextChar(3)|0x20)=='d'))
  108.     {
  109.         StoreString("\pUD");
  110.         InputPlus(4);
  111.         return;
  112.     }
  113.     
  114.     if ((gInWord) && (oneChar=='o') && ((NextChar(1)|0x20)=='u') && ((NextChar(2)|0x20)=='g') && ((NextChar(3)|0x20)=='h'))
  115.     {
  116.         StoreString("\pUF");
  117.         InputPlus(4);
  118.         return;
  119.     }
  120.     
  121.     if ((gInWord) && (oneChar=='a') && ((NextChar(1)|0x20)=='u') && ((NextChar(2)|0x20)=='g') && ((NextChar(3)|0x20)=='h'))
  122.     {
  123.         StoreString("\pAFF");
  124.         InputPlus(4);
  125.         return;
  126.     }
  127.     
  128.     if ((oneChar=='i') && ((NextChar(1)|0x20)=='l') && ((NextChar(2)|0x20)=='e'))
  129.     {
  130.         gInWord=TRUE;
  131.         StoreString("\pIEL");
  132.         InputPlus(3);
  133.         return;
  134.     }
  135.     
  136.     if (oneChar=='o')
  137.     {
  138.         gInWord=TRUE;
  139.         StoreChar('0');
  140.         InputPlus(1);
  141.         return;
  142.     }
  143.     
  144.     if (oneChar=='i')
  145.     {
  146.         gInWord=TRUE;
  147.         StoreChar('1');
  148.         InputPlus(1);
  149.         return;
  150.     }
  151.     
  152.     if ((!gInWord) && (oneChar=='t') && ((NextChar(1)|0x20)=='o') && (!IsAlpha(NextChar(2))))
  153.     {
  154.         gInWord=TRUE;
  155.         StoreChar('2');
  156.         InputPlus(2);
  157.         return;
  158.     }
  159.     
  160.     if ((oneChar=='f') && ((NextChar(1)|0x20)=='o') && ((NextChar(2)|0x20)=='r') && ((NextChar(3)|0x20)=='e'))
  161.     {
  162.         gInWord=TRUE;
  163.         StoreChar('4');
  164.         InputPlus(4);
  165.         return;
  166.     }
  167.     
  168.     if ((oneChar=='f') && ((NextChar(1)|0x20)=='o') && ((NextChar(2)|0x20)=='r'))
  169.     {
  170.         gInWord=TRUE;
  171.         StoreChar('4');
  172.         InputPlus(3);
  173.         return;
  174.     }
  175.     
  176.     if (oneChar=='s')
  177.     {
  178.         gInWord=TRUE;
  179.         StoreChar('5');
  180.         InputPlus(1);
  181.         return;
  182.     }
  183.     
  184.     if ((oneChar=='a') && ((NextChar(1)|0x20)=='t') && ((NextChar(2)|0x20)=='e'))
  185.     {
  186.         gInWord=TRUE;
  187.         StoreChar('8');
  188.         InputPlus(3);
  189.         return;
  190.     }
  191.     
  192.     if ((!gInWord) && (oneChar=='b') && ((NextChar(1)|0x20)=='e'))
  193.     {
  194.         gInWord=TRUE;
  195.         StoreChar('B');
  196.         InputPlus(2);
  197.         return;
  198.     }
  199.     
  200.     if ((!gInWord) && (oneChar=='s') && ((NextChar(1)|0x20)=='e') && ((NextChar(2)|0x20)=='e') && (!IsAlpha(NextChar(3))))
  201.     {
  202.         gInWord=TRUE;
  203.         StoreChar('C');
  204.         InputPlus(3);
  205.         return;
  206.     }
  207.     
  208.     if ((!gInWord) && (oneChar=='a') && ((NextChar(1)|0x20)=='m') && (!IsAlpha(NextChar(2))))
  209.     {
  210.         gInWord=TRUE;
  211.         StoreChar('M');
  212.         InputPlus(2);
  213.         return;
  214.     }
  215.     
  216.     if ((!gInWord) && (oneChar=='a') && ((NextChar(1)|0x20)=='r') && ((NextChar(2)|0x20)=='e') && (!IsAlpha(NextChar(3))))
  217.     {
  218.         gInWord=TRUE;
  219.         StoreChar('R');
  220.         InputPlus(3);
  221.         return;
  222.     }
  223.     
  224.     if ((!gInWord) && (oneChar=='e') && ((NextChar(1)|0x20)=='x'))
  225.     {
  226.         gInWord=TRUE;
  227.         StoreChar('X');
  228.         InputPlus(2);
  229.         return;
  230.     }
  231.     
  232.     if ((!gInWord) && (oneChar=='w') && ((NextChar(1)|0x20)=='h') && ((NextChar(2)|0x20)=='y') && (!IsAlpha(NextChar(3))))
  233.     {
  234.         gInWord=TRUE;
  235.         StoreChar('Y');
  236.         InputPlus(3);
  237.         return;
  238.     }
  239.     
  240.     if ((oneChar=='c') && ((NextChar(1)|0x20)=='h'))
  241.     {
  242.         gInWord=TRUE;
  243.         StoreString("\pCH");
  244.         InputPlus(2);
  245.         return;
  246.     }
  247.     
  248.     if ((!gInWord) && (oneChar=='c'))
  249.     {
  250.         gInWord=TRUE;
  251.         StoreChar('K');
  252.         InputPlus(1);
  253.         return;
  254.     }
  255.     
  256.     if ((gInWord) && (oneChar=='s') && ((NextChar(1)|0x20)=='e') && (!IsAlpha(NextChar(2))))
  257.     {
  258.         StoreChar('Z');
  259.         InputPlus(2);
  260.         return;
  261.     }
  262.     
  263.     if ((gInWord) && (oneChar=='e') && ((NextChar(1)|0x20)=='s') && (!IsAlpha(NextChar(2))))
  264.     {
  265.         StoreString("\pEZ");
  266.         InputPlus(2);
  267.         return;
  268.     }
  269.     
  270.     if ((gInWord) && (oneChar=='s') && (!IsAlpha(NextChar(1))))
  271.     {
  272.         StoreChar('Z');
  273.         InputPlus(1);
  274.         return;
  275.     }
  276.     
  277.     if ((oneChar=='p') && ((NextChar(1)|0x20)=='h'))
  278.     {
  279.         gInWord=TRUE;
  280.         StoreChar('F');
  281.         InputPlus(2);
  282.         return;
  283.     }
  284.     
  285.     if ((!gInWord) && (oneChar=='y') && ((NextChar(1)|0x20)=='o') && ((NextChar(2)|0x20)=='u') && ((NextChar(3)|0x20)=='r'))
  286.     {
  287.         gInWord=TRUE;
  288.         StoreString("\pUR");
  289.         InputPlus(4);
  290.         return;
  291.     }
  292.     
  293.     if ((!gInWord) && (oneChar=='y') && ((NextChar(1)|0x20)=='o') && ((NextChar(2)|0x20)=='u') && (!IsAlpha(NextChar(3))))
  294.     {
  295.         gInWord=TRUE;
  296.         StoreChar('U');
  297.         InputPlus(3);
  298.         return;
  299.     }
  300.     
  301.     if ((oneChar=='e') && ((NextChar(1)|0x20)=='a'))
  302.     {
  303.         gInWord=TRUE;
  304.         StoreString("\pEE");
  305.         InputPlus(2);
  306.         return;
  307.     }
  308.     
  309.     if ((oneChar=='a') && ((NextChar(1)|0x20)=='n') && ((NextChar(2)|0x20)=='d'))
  310.     {
  311.         gInWord=TRUE;
  312.         StoreChar('&');
  313.         InputPlus(3);
  314.         return;
  315.     }
  316.     
  317.     if ((!gInWord) && (oneChar=='w') && ((NextChar(1)|0x20)=='a') && ((NextChar(2)|0x20)=='s'))
  318.     {
  319.         gInWord=TRUE;
  320.         StoreString("\pWUZ");
  321.         InputPlus(3);
  322.         return;
  323.     }
  324.     
  325.     if ((!gInWord) && (oneChar=='s') && ((NextChar(1)|0x20)=='a') && ((NextChar(2)|0x20)=='y') && ((NextChar(3)|0x20)=='s'))
  326.     {
  327.         gInWord=TRUE;
  328.         StoreString("\pSEZ");
  329.         InputPlus(4);
  330.         return;
  331.     }
  332.     
  333.     gInWord=TRUE;
  334.     StoreChar(ThisChar()&0xdf);
  335.     InputPlus(1);
  336. }
  337.  
  338. char ThisChar(void)
  339. {
  340.     if (gInputOffset>=INPUT_BUFFER_MAX)
  341.         gInputNeedsUpdate=TRUE;
  342.     if (gAbsoluteOffset>=gInputLength)
  343.         return 0x00;
  344.     else
  345.         return *((char*)((long)gInputBuffer+gInputOffset));
  346. }
  347.  
  348. char NextChar(int howmany)
  349. {
  350.     if (gAbsoluteOffset+howmany>=gInputLength)
  351.         return 0x00;
  352.     else
  353.         return *((char*)((long)gInputBuffer+gInputOffset+howmany));
  354. }
  355.  
  356. Boolean IsAlpha(char thisChar)
  357. {
  358.     return ((((thisChar|0x20)>='a') && ((thisChar|0x20)<='z')) || (thisChar==0x27));
  359. }
  360.  
  361. Boolean IsNumeric(char thisChar)
  362. {
  363.     return ((thisChar>='0') && (thisChar<='9'));
  364. }
  365.  
  366. void StoreChar(char thisChar)
  367. {
  368.     *((char*)((long)gOutputBuffer+(gOutputOffset++)))=thisChar;
  369.     if (gOutputOffset>=OUTPUT_BUFFER_MAX)
  370.         gOutputNeedsUpdate=TRUE;
  371. }
  372.  
  373. void StoreString(Str255 thisString)
  374. {
  375.     int                i;
  376.     
  377.     for (i=1; i<=thisString[0]; i++)
  378.         StoreChar(thisString[i]);
  379. }
  380.  
  381. void InputPlus(int howmany)
  382. {
  383.     gInputOffset+=howmany;
  384.     gAbsoluteOffset+=howmany;
  385. }
  386.